package ast

func (String) impl(Term) {}
type String struct {
	Node                          `part:"string"`
	First  Text                   `part:"text"`
	Parts  [] VariousStringPart   `list:"string_part*"`
}
type VariousStringPart struct {
	Node                         `part:"string_part"`
	Content  StringPartContent   `part:"string_part_content"`
}
type StringPartContent struct {
	Node               `part:"string_part_content"`
	Part  StringPart   `use:"first"`
}
type StringPart interface { implStringPart() }
func (Text) implStringPart() {}
type Text struct {
	Node          `part:"text"`
	Value  Code   `content:"Text"`
}

func (Bytes) impl(Term) {}
type Bytes struct {
	Node             `part:"bytes"`
	Bytes  [] Byte   `list:"byte+"`
}
type Byte struct {
	Node          `part:"byte"`
	Value  Code   `content:"Byte"`
}

func (Char) impl(Term) {}
func (Char) implStringPart() {}
type Char struct {
	Node          `part:"char"`
	Value  Code   `content:"Char"`
}

func (Int) impl(Term) {}
type Int struct {
	Node          `part:"int"`
	Value  Code   `content:"Int"`
}

func (Float) impl(Term) {}
type Float struct {
	Node          `part:"float"`
	Value  Code   `content:"Float"`
}


